package com.itheima.controller;

import com.itheima.domain.User;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    //模拟从数据库查询
    private static ArrayList<User> list = new ArrayList<User>();
    static {
        list.add(new User("张三", "123"));
        list.add(new User("李四", "123"));
    }

    //查询所有
    //value = "tanhua" 前缀   key = "'user' spring el表达式" 键的名称 注意 此处要加上两个单引号 表示字符串
    //1.第一次执行此注解 将返回值放入缓存中存储一份 , 如果缓存有 读取缓存 如果缓存没有 执行代码逻辑 再放入缓存
    @Cacheable(value = "tanhua", key = "'user'")
    @RequestMapping("/findAll")
    public List<User> findAll() {
        System.out.println("从数据库中查询数据.............");
        return list;
    }

    //更新
    //删除缓存 value = "tanhua" 探花开头的文件夹  allEntries : 所有的数据  key = "'user'" 删除指定数据
    //@CacheEvict(value = "tanhua", key = "'user'")
    @CacheEvict(value = "tanhua", allEntries = true)
    @RequestMapping("/save")
    public String save() {
        System.out.println("从数据库中保存.............");
        list.add(new User("王五", "123"));
        return "OK";
    }


    //分页查询
    //将每一页数据存入redis
    //key = "'user_'+#pageNum+'_'+#pageSize"  支持spring EL    #变量的key  如果是固定值请加上单引号
    //user_1_10
    @Cacheable(value = "tanhua", key = "'user_'+#pageNum+'_'+#pageSize")
    @RequestMapping("/findByPage")
    public List<User> findByPage(Integer pageNum, Integer pageSize) {
        System.out.println("从数据库中查询数据,第" + pageNum + "页,每页" + pageSize + "条");
        return list;
    }
}